package com.jxdinfo.hussar.example.common.schedulingtask.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxdinfo.hussar.example.common.schedulingtask.dao.SysStruMesMapper;
import com.jxdinfo.hussar.example.common.schedulingtask.dao.SysUsersMesMapper;
import com.jxdinfo.hussar.example.common.schedulingtask.model.SysOrganMes;
import com.jxdinfo.hussar.example.common.schedulingtask.model.SysStaffMes;
import com.jxdinfo.hussar.example.common.schedulingtask.model.SysStruMes;
import com.jxdinfo.hussar.example.common.schedulingtask.model.SysUsersMes;
import com.jxdinfo.hussar.example.common.schedulingtask.scheduleutil.ScheduleUtils;
import com.jxdinfo.hussar.example.common.schedulingtask.service.SysUsersService;
import com.jxdinfo.hussar.example.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 客户表 服务实现类
 * </p>
 *
 * @author 乔镔
 * @since 2024-04-03
 */
@Service("com.jxdinfo.hussar.example.common.schedulingtask.service.impl.SysUsersServiceImpl")
public class SysUsersServiceImpl extends ServiceImpl<SysUsersMesMapper, SysUsersMes> implements SysUsersService {

    @Autowired
    private SysUsersMesMapper sysUsersMesMapper;

    @Autowired
    private SysStruMesMapper sysStruMesMapper;

    @Override
    public void manualSynchronization() {
        //从erp数据库中取出所有员工信息
        List<SysOrganMes> sysOragnMes = sysUsersMesMapper.selectAllSysUsers();

        SysOrganMes mes = new SysOrganMes();
        //公司所有员工
        for (SysOrganMes sysOragnMe : sysOragnMes) {
            //先修改员工状态
            SysUsersMes sysUsersMes = new SysUsersMes();
            sysUsersMes.setACCOUNT_STATUS(sysOragnMe.getDEL_FLAG());
            //sys_organ
            mes.setORGAN_NAME(sysOragnMe.getSHORT_NAME().replace("/","or"));
            //查询是哪一个部门
            SysOrganMes organMes = sysUsersMesMapper.selectSysOrgan(mes);
            if (StringUtils.isNotNull(organMes)){
                //部门编号
                sysOragnMe.setORGAN_FCODE(organMes.getORGAN_FCODE() + sysOragnMe.getORGAN_CODE() + "/");
                sysOragnMe.setORGAN_FNAME(organMes.getORGAN_FNAME() + "/" + sysOragnMe.getORGAN_NAME());
            }
            //其他常量赋值
            sysOragnMe.setSHORT_NAME(sysOragnMe.getORGAN_NAME());
            sysOragnMe.setORGAN_TYPE("9");
            if (sysOragnMe.getDEL_FLAG().equals("1")){
                sysOragnMe.setDEL_FLAG("0");
            }
            sysOragnMe.setPARENT_TYPE_CODE("2");

            //sys_stru
            SysStruMes sysStruMes = new SysStruMes();
            sysStruMes.setORGAN_ALIAS(sysOragnMe.getORGAN_NAME());
            //查询sys_stru表的部门信息
            SysStruMes struMes = new SysStruMes();
            struMes.setORGAN_ALIAS(mes.getORGAN_NAME());
            struMes = sysStruMesMapper.selectSysStru(struMes);
            //赋值相关信息
            sysStruMes.setSTRU_ID(sysOragnMe.getORGAN_ID());
            sysStruMes.setSTRU_TYPE(sysOragnMe.getORGAN_TYPE());
            sysStruMes.setORGAN_ID(sysOragnMe.getORGAN_ID());
            sysStruMes.setPARENT_ID(struMes.getSTRU_ID());
            sysStruMes.setSTRU_FID(struMes.getSTRU_FID() + sysOragnMe.getORGAN_ID() + "/");
            sysStruMes.setSTRU_LEVEL(sysStruMes.getSTRU_FID().split("/").length - 1);
            String a = "/0001";
            StringBuilder b = new StringBuilder();
            for (int i = 0; i < sysStruMes.getSTRU_FID().split("/").length - 1; i++) {
                b.append(a);
            }
            sysStruMes.setSTRU_SEQ(b.toString());
            sysStruMes.setDEL_FLAG(sysOragnMe.getDEL_FLAG());
            sysStruMes.setIS_LEAF("0");
            sysStruMes.setIS_EMPLOYEE("1");

            //sys_staff
            SysStaffMes sysStaffMes = new SysStaffMes();
            sysStaffMes.setSTAFF_ID(sysStruMes.getSTRU_ID());
            sysStaffMes.setSTRU_ID(sysStruMes.getSTRU_ID());
            sysStaffMes.setNAME(sysStruMes.getORGAN_ALIAS());
            sysStaffMes.setSEX("2");
            sysStaffMes.setWORK_ID(sysOragnMe.getORGAN_CODE());

            //sys_users
            sysUsersMes.setUSER_ID(sysOragnMe.getORGAN_ID());
            sysUsersMes.setUSER_ACCOUNT(sysOragnMe.getORGAN_CODE());
            sysUsersMes.setUSER_NAME(sysOragnMe.getORGAN_NAME());

            sysUsersMes.setIS_SYS("0"); //是否为系统管理员
            sysUsersMes.setSECURITY_LEVEL(1); //安全级别
            sysUsersMes.setIS_CPUBLIC("0"); //是否公司级公用账号
            sysUsersMes.setCORPORATION_ID(sysStruMes.getSTRU_ID()); //公司结构编码
            sysUsersMes.setDEPARTMENT_ID(sysStruMes.getSTRU_ID()); //公司结构编码
            sysUsersMes.setEMPLOYEE_ID(sysStruMes.getSTRU_ID()); //公司结构编码
            sysUsersMes.setTYPE_PROPERTY("1"); //类型属性 0 临时账号 1长期账号
            sysUsersMes.setLOGIN_TIME_LIMIT("0"); //是否开启登录时间验证，1 开启 0不开启
            sysUsersMes.setLOGIN_IP_LIMIT("0"); //是否开启登录IP验证，1 开启 0不开启
            sysUsersMes.setMAX_SESSIONS(1); //允许创建的最大会话数
            sysUsersMes.setTOTP_KEY(""); //身份验证

            //查询mes数据库是否存在此人数据，存在插入，不存在不执行操作
            SysOrganMes sysOrganMes = sysUsersMesMapper.selectSysOrgan(sysOragnMe);
            if (StringUtils.isNull(sysOrganMes)){
                sysUsersMesMapper.insertSysOrgan(sysOragnMe);
                sysUsersMesMapper.insertSysStru(sysStruMes);
                sysUsersMesMapper.insertSysStaff(sysStaffMes);
            }

            //根据erp的每个对象去查找mes数据库是否存在这一条数据
            SysUsersMes users = sysUsersMesMapper.selectSysUsers(sysUsersMes);
            if (StringUtils.isNull(users)){
                sysUsersMes.setPASSWORD("8f1836e6bad2a6482baaa214f82d"); //设置初始密码
                sysUsersMesMapper.insertSysUsers(sysUsersMes);
                sysUsersMesMapper.insertSysUserTenant(sysUsersMes);
            }
        }
    }
}
